<?php

class MensagemDao extends Dao {

    /**
     * @var AtendimentoService
     */
    private $atendimentoService;

    public function injectDependencies() {
        $this->atendimentoService = AtendimentoService::getInstance();
    }

    public function blockMessage($IDMensagem) {
        $Chamado = $this->atendimentoService->findCalledByMessage($IDMensagem);
        $this->initTransaction();
        $StSqlBlockMessage = TQuery::getSqlBlockMessage($IDMensagem);
        $this->tMysqli->exec($StSqlBlockMessage);
        if( $Chamado->countBlockedMessages() == 1 ) {
            $StSqlUpdateCalled = TQuery::getSqlUpdateCalledByFilter( array('EnStatus' => 'ATENDENTE', 'IDChamado' => $Chamado->getIDChamado()) );
            $this->tMysqli->exec($StSqlUpdateCalled);
        }
        $this->closeTransaction();
        return $this->tMysqli->lastTransactionReturn();
    }

    public function unblockMessage($IDMensagem, $Mensagem) {
        $this->initTransaction();
        $this->tMysqli->escape($IDMensagem);
        $StSqlUnblockMessage = TQuery::getSqlUnblockMessage($IDMensagem);
        $StSqlHistoryMessage = TQuery::getSqlInsertNewMessage($Mensagem);
        $this->tMysqli->exec($StSqlUnblockMessage);
        $this->tMysqli->exec($StSqlHistoryMessage);
        $this->closeTransaction();
        return $this->tMysqli->lastTransactionReturn();
    }

    public function findWaitingLiberationById($IDMensagem) {
        $this->initConnection();
        $this->tMysqli->escape($IDMensagem);
        $StSql = TQuery::getSqlFindMessageById($IDMensagem);
        $tQuery = $this->tMysqli->exec($StSql);
        $Mensagem = false;
        while ($ArMessageData = mysqli_fetch_assoc($tQuery)) {
            $Mensagem = new Mensagem($ArMessageData['TxMensagem']);
            $Mensagem->loadMessageCalled($ArMessageData);
        }
        $this->closeConnection();
        return $Mensagem;
    }

    public function findAllBlockedMessagesFromLoggedUser() {
        $IDSetor = Dracosys::getLoggedUser()->getTDepartamento()->getSetores(true)->getIDSetor();
        $this->initConnection();
        $StSql = TQuery::getSqlFindAllBlockedMessagesBySector($IDSetor);
        $tQuery = $this->tMysqli->exec($StSql);
        $ArMessages = array();
        while ($ArMessageData = mysqli_fetch_assoc($tQuery)) {
            $Mensagem = new Mensagem($ArMessageData['TxMensagem']);
            $Mensagem->loadMessageCalled($ArMessageData);
            $ArMessages[] = $Mensagem;
        }
        $this->closeConnection();
        return $ArMessages;
    }

    public function findByCalled($IDChamado) {
        $this->initConnection();
        $this->tMysqli->escape($IDChamado);
        $StSql = TQuery::getSqlFindAllMessagesByCalledId($IDChamado);
        $tQuery = $this->tMysqli->exec($StSql);
        $ArMensagens = array();
        while($ArMessageData = mysqli_fetch_assoc($tQuery)) {
            $Mensagem = new Mensagem($ArMessageData['TxMensagem']);
            $Mensagem->loadMessageCalled($ArMessageData);
            $ArMensagens[] = $Mensagem;
        }
        $this->closeConnection();
        return $ArMensagens;
    }

}

?>
